using AiQiuQuan.Sport.Model.Models;
using AiQiuQuan.Sport.Core;

namespace AiQiuQuan.Sport.WebApi.Services
{
    /// <summary>
    /// 约球管理
    /// </summary>
    public interface IBallService : ITransientDependency
    {
        /// <summary>
        /// 查询
        /// </summary>
        Task<BallDto> GetAsync(Guid id);

        /// <summary>
        /// 约球查询
        /// </summary>
        Task<BallDto> QueryAsync(BallQueryDto request);

        /// <summary>
        /// 分页查询
        /// </summary>
        Task<PageResult<BallDto>> PageListAsync(BallPageRequestDto request);

        /// <summary>
        /// 获取自己参与的约球列表
        /// </summary>
        Task<PageResult<BallDto>> GetMyBallPageListAsync(BallSelfPageRequestDto request);

        /// <summary>
        /// 新增
        /// </summary>
        Task<UnaryResult> AddAsync(BallAddDto model);

        /// <summary>
        /// 修改
        /// </summary>
        Task<UnaryResult> UpdateAsync(BallUpdateDto model);

        /// <summary>
        /// 修改约球状态
        /// </summary>
        Task<UnaryResult> UpdateStateAsync(BallStateUpdateDto request);

        /// <summary>
        /// 删除
        /// </summary>
        Task<UnaryResult> DeleteAsync(Guid id);

        /// <summary>
        /// 约球报名
        /// </summary>
        Task<UnaryResult<BallJoinResultDto>> JoinAsync(BallUserJoinAddDto request);

        /// <summary>
        /// 获取约球用户列表
        /// </summary>
        Task<List<BallUserDto>> GetBallUserListAsync(BallUserQueryDto request);

        /// <summary>
        /// 通过订单ID获取约球用户列表
        /// </summary>
        /// <param name="orderId">约球订单ID</param>
        Task<List<BallUserDto>> GetBallUserListByOrderIdAsync(Guid orderId);

        /// <summary>
        /// 约球用户评价
        /// </summary>
        Task<UnaryResult> EvalulateUserAsync(BallEvaluationAddDto request);

        /// <summary>
        /// 获取约球用户评价
        /// </summary>
        Task<List<BallEvaluationDto>> GetBallEvalulationListAsync(BallEvaluationRequestDto request);
    }
}
